#! /usr/bin/env python
# -*- coding: utf-8 -*-

import json
import time
import urllib.parse
import urllib.request
from .info_collectionn import InfoCollection
from Client.conf import settings


class ArgvHandler(object):
    def __init__(self, args):
        self.args = args
        self.parse_args()

    # 分析参数，如果有参数指定的功能，则执行该功能，如果没有，输出帮助说明
    def parse_args(self):
        if len(self.args) > 1 and hasattr(self, self.args[1]):
            func = getattr(self, self.args[1])
            func()
        else:
            self.help_msg()

    # 帮助说明
    @staticmethod
    def help_msg():
        msg = '''
            collect_data        收集硬件信息
            report_data         收集硬件信息并汇报
        '''
        print(msg)

    # 收集硬件信息，用于测试
    @staticmethod
    def collect_data():
        info = InfoCollection()
        asset_data = info.collect()
        print(asset_data)

    # 收集硬件信息，发送到服务器
    info = InfoCollection()
    asset_data = info.collect()
    # 将数据打包到一个字典，转换为json
    data = {"asset_data": json.dumps(asset_data)}
    # 根据settings里的配置，构造url
    url = 'http://%s:%s%s' % (settings.Params['server'], settings.Params['port'], settings.Params['url'])
    print('正在将数据发送至: [%s] .........' % url)
    try:
        # 使用python内置的urllib.request库，发送post请求
        # 先将数据进行封装，并转换成bytes类型
        data_encode = urllib.parse.urlencode(data).encode()
        response = urllib.request.urlopen(url=url, data=data_encode, timeout=settings.Params['request_timeout'])
        print('\033[31;1m发送完毕！\033[0m ')
        message = response.read().decode()
        print('返回结果: %s' % message)
    except Exception as e:
        message = '发送失败'
        print('\033[31;1m发送失败，%s\033[0m' % e)
    # 记录发送日志
    with open(settings.PATH, 'ab') as f:
        string = '发送时间: %s \t服务器地址: %s \t返回结果: %s \n' % (time.strftime('%Y-%m-%d %H:%M:%S'), url, message)
        f.write(string.encode())
        print('日志记录成功')
